From: Adel Gadllah Date: Fri, 7 Jan 2011 10:12:00 +0000 (+0100) Subject: XDND: Don't reset switch timeout when pointer is over the same window X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~9230 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ee6a852996b1fed57c524906c6f06d1169315bcb;p=gnome-shell.git XDND: Don't reset switch timeout when pointer is over the same window Currently we reset the timeout on every mouse movement which means the user has to keep the mouse at the exact same position for 1.25 seconds. Be more tolerant and allow the user to move the mouse over the window without reseting the timeout, which should make activating windows easier. https://bugzilla.gnome.org/show_bug.cgi?id=638896 --- diff --git a/js/ui/overview.js b/js/ui/overview.js index 353d769e8..7aa24237e 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -167,6 +167,7 @@ Overview.prototype = { this._windowSwitchTimeoutId = 0; this._windowSwitchTimestamp = 0; this._lastActiveWorkspaceIndex = -1; + this._lastHoveredWindow = null; this._needsFakePointerEvent = false; this.workspaces = null; @@ -186,7 +187,7 @@ Overview.prototype = { global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time); this.hideTemporarily(); } - + this._lastHoveredWindow = null; DND.removeMonitor(this._dragMonitor); }, @@ -200,15 +201,24 @@ Overview.prototype = { }, _onDragMotion: function(dragEvent) { + let targetIsWindow = dragEvent.targetActor && + dragEvent.targetActor._delegate && + dragEvent.targetActor._delegate.metaWindow; + + if (targetIsWindow && + dragEvent.targetActor._delegate.metaWindow == this._lastHoveredWindow) + return; + else + this._lastHoveredWindow = null; + if (this._windowSwitchTimeoutId != 0) { Mainloop.source_remove(this._windowSwitchTimeoutId); this._windowSwitchTimeoutId = 0; this._needsFakePointerEvent = false; } - if (dragEvent.targetActor && - dragEvent.targetActor._delegate && - dragEvent.targetActor._delegate.metaWindow) { + if (targetIsWindow) { + this._lastHoveredWindow = dragEvent.targetActor._delegate.metaWindow; this._windowSwitchTimestamp = global.get_current_time(); this._windowSwitchTimeoutId = Mainloop.timeout_add(DND_WINDOW_SWITCH_TIMEOUT, Lang.bind(this, function() { @@ -216,6 +226,7 @@ Overview.prototype = { Main.activateWindow(dragEvent.targetActor._delegate.metaWindow, this._windowSwitchTimestamp); this.hideTemporarily(); + this._lastHoveredWindow = null; })); }